#ifndef _MB_BOOT_H_
#define _MB_BOOT_H_

#include "mb_type.h"
#include "mb_mw.h"

/* mboot 操作接口 */
typedef struct mboot_op_str
{
    int (*init)(void);                  /* mboot 初始化 */
    int (*boot_delay)(int delay_s);     /* 启动延迟判断是否进入 mboot */

    /* ------ test for developer ------- */
    int (*test_print_newbin)(void);      /* 打印接收到的固件数据 */
} mboot_op, *mboot_op_t;

/* 判断系统的选项状态 */
typedef struct mboot_select_status_str
{
    MB_STATUS is_prot_sel;
    MB_STATUS is_cmc_sel;
    MB_STATUS is_sto_sel;
} mboot_select_status;

/* mboot 私有数据 */
typedef struct mboot_prvt_str
{
    mb_mw *             mw;                           /* 中间件操作函数接口 */
    mboot_select_status evesel_status;                /* 每个项的选择状态 */
    MB_STATUS           SELECTS_STATUS;               /* 所有的选项项状态 */
    MB_XFR_STATUS       UPDATE_STATUS;                /* 升级状态 */
    uint8_t             write_buf[MB_FW_RW_LEN_DEF];  /* 要写的数据缓冲区 */
    mb_buf_attr         buf_attr;
    MB_STATUS           is_writed;                 /* 判断是否是新的一次写入 */
    MB_STATUS           is_delay_stoped;           /* 判断倒计时是否停止 */
    MB_STATUS           is_need_show_menu;         /* 是否需要显示菜单 */
} mboot_prvt, *mboot_prvt_t;

/* mboot 初始化 */
mboot_op *mboot_op_register(void);

#endif
